Custom Request/Response Interceptors

Java Technologies - অ্যাপাচি এইচটিটিপি ক্লায়েন্ট (Apache HTTP Client) Custom HTTP Clients তৈরি |
187
187

অ্যাপাচি HTTP ক্লায়েন্ট (Apache HTTP Client)Custom Request/Response Interceptors ব্যবহৃত হয় রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়ার মধ্যে কাস্টম লজিক প্রয়োগ করতে। ইন্টারসেপ্টরগুলি ক্লায়েন্টের রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়াকে কাস্টমাইজ করতে এবং অতিরিক্ত ফিচার যেমন লগিং, কাস্টম হেডার অ্যাড করা, সিকিউরিটি চেক বা প্রোফাইলিং সম্পাদন করতে ব্যবহৃত হয়।

Request Interceptor এবং Response Interceptor:

  • Request Interceptor: এটি একটি কাস্টম লজিক যা HTTP রিকুয়েস্ট প্রেরণের আগে এক্সিকিউট হয়। আপনি এটি ব্যবহার করতে পারেন, যেমন হেডার যোগ করা, কুকি সেট করা, বা রিকুয়েস্টের কন্টেন্ট পরিবর্তন করা।
  • Response Interceptor: এটি রেসপন্স গ্রহণের পরে এক্সিকিউট হয় এবং রেসপন্সের কন্টেন্ট বা স্ট্যাটাস কোড পর্যালোচনা বা পরিবর্তন করতে ব্যবহৃত হয়।

উদাহরণ: Custom Request এবং Response Interceptors তৈরি করা

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.RequestConfig;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpRequestBase;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.HttpRequest;
import org.apache.http.HttpEntityEnclosingRequestBase;
import org.apache.http.impl.HttpClientBuilder;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.HttpResponseException;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.impl.client.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

public class CustomInterceptorExample {
    public static void main(String[] args) {
        try {
            // Request Interceptor তৈরি করা (রিকুয়েস্টে কাস্টম হেডার যোগ করা)
            HttpRequestInterceptor requestInterceptor = (request, context) -> {
                request.addHeader("X-Custom-Header", "CustomHeaderValue");
                System.out.println("Request Interceptor: Added custom header.");
            };

            // Response Interceptor তৈরি করা (রেসপন্সের স্ট্যাটাস কোড পর্যালোচনা)
            HttpResponseInterceptor responseInterceptor = (response, context) -> {
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 404) {
                    System.out.println("Response Interceptor: Resource not found (404).");
                }
            };

            // RequestConfig কনফিগারেশন
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(5000) // কানেকশন টাইমআউট
                    .setSocketTimeout(5000)  // সোকেট টাইমআউট
                    .build();

            // HttpClient কনফিগারেশন (ইন্টারসেপ্টর সহ)
            CloseableHttpClient httpClient = HttpClients.custom()
                    .addInterceptorFirst(requestInterceptor)  // Request Interceptor যোগ করা
                    .addInterceptorLast(responseInterceptor)   // Response Interceptor যোগ করা
                    .setDefaultRequestConfig(requestConfig)    // RequestConfig কনফিগারেশন সেট করা
                    .build();

            // HTTP GET রিকুয়েস্ট তৈরি করা
            HttpGet request = new HttpGet("http://example.com");

            // রিকুয়েস্ট পাঠানো এবং রেসপন্স গ্রহণ
            CloseableHttpResponse response = httpClient.execute(request);
            System.out.println("Response Status: " + response.getStatusLine().getStatusCode());

            // রেসপন্স কন্টেন্ট
            String responseContent = EntityUtils.toString(response.getEntity());
            System.out.println("Response Content: " + responseContent);

            response.close();
            httpClient.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

উদাহরণের ব্যাখ্যা:

  1. Request Interceptor: এই ইন্টারসেপ্টরটি HTTP রিকুয়েস্ট পাঠানোর আগে addHeader() মেথড ব্যবহার করে একটি কাস্টম হেডার (X-Custom-Header) যোগ করে। এটি ইন্টারসেপ্টরের ভিতরে যেকোনো পরিবর্তন বা কার্যকলাপ সম্পাদন করতে সক্ষম করে।
  2. Response Interceptor: এই ইন্টারসেপ্টরটি HTTP রেসপন্স গ্রহণের পর, রেসপন্সের স্ট্যাটাস কোড চেক করে। এখানে, যদি স্ট্যাটাস কোড 404 হয় (যেমন রিসোর্স পাওয়া যায় না), তাহলে একটি মেসেজ প্রিন্ট করা হয়।
  3. addInterceptorFirst() এবং addInterceptorLast(): এগুলি HTTP ক্লায়েন্টের জন্য ইন্টারসেপ্টর যোগ করার পদ্ধতি। addInterceptorFirst() ইন্টারসেপ্টরটি প্রথমে চলবে এবং addInterceptorLast() ইন্টারসেপ্টরটি রিকুয়েস্ট প্রক্রিয়া শেষে চলবে।
  4. setDefaultRequestConfig(requestConfig): রিকুয়েস্টের জন্য টাইমআউট কনফিগার করা হয়েছে, যেমন কানেকশন এবং সোকেট টাইমআউট।
  5. httpClient.execute(request): HTTP GET রিকুয়েস্টটি প্রেরণ করা হয়েছে এবং রেসপন্সের স্ট্যাটাস কোড এবং কন্টেন্ট গ্রহণ করা হয়েছে।

অতিরিক্ত কনফিগারেশন:

  • Custom Logging: আপনি রিকুয়েস্ট এবং রেসপন্সের জন্য লগিং যোগ করতে পারেন, যাতে HTTP রিকুয়েস্ট এবং রেসপন্সের সময় লগ তৈরি করা হয়।
  • Custom Authentication: আপনি একটি কাস্টম ইন্টারসেপ্টর তৈরি করে রিকুয়েস্টের সাথে স্বয়ংক্রিয়ভাবে প্রমাণীকরণ হেডার যোগ করতে পারেন।
  • Exception Handling: ইন্টারসেপ্টরের মধ্যে আপনি কাস্টম এক্সসেপশন হ্যান্ডলিং যোগ করতে পারেন, যেমন সার্ভার সাইড এরর 500 হলে পুনরায় চেষ্টা করা।

সারাংশ:

Custom Request/Response Interceptors অ্যাপাচি HTTP ক্লায়েন্টে আপনার রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়া কাস্টমাইজ করতে সহায়ক। রিকুয়েস্ট ইন্টারসেপ্টর আপনাকে কাস্টম হেডার বা কন্টেন্ট পরিবর্তন করতে দেয়, এবং রেসপন্স ইন্টারসেপ্টর আপনাকে রেসপন্সের স্ট্যাটাস কোড পর্যালোচনা বা কাস্টম লজিক প্রয়োগ করতে দেয়। এটি উন্নত লগিং, সিকিউরিটি, এবং অন্যান্য ফিচার যোগ করতে একটি শক্তিশালী সরঞ্জাম।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion